{ "version": 3, "sections": [ {"offset": {"line": 4, "column": 0}, "map": {"version":3,"sources":["/turbopack/[turbopack-dev]/client/websocket.ts"],"sourcesContent":["// Adapted from https://github.com/vercel/next.js/blob/canary/packages/next/client/dev/error-overlay/websocket.ts\n\nlet source: WebSocket;\nconst eventCallbacks: ((event: WebsocketEvent) => void)[] = [];\n\n// TODO: add timeout again\n// let lastActivity = Date.now()\n\nfunction getSocketProtocol(assetPrefix: string): string {\n let protocol = location.protocol;\n\n try {\n // assetPrefix is a url\n protocol = new URL(assetPrefix).protocol;\n } catch (_) {}\n\n return protocol === \"http:\" ? \"ws\" : \"wss\";\n}\n\ntype WebsocketEvent =\n | {\n type: \"connected\";\n }\n | {\n type: \"message\";\n message: MessageEvent;\n };\n\nexport function addEventListener(cb: (event: WebsocketEvent) => void) {\n eventCallbacks.push(cb);\n}\n\nexport function sendMessage(data: any) {\n if (!source || source.readyState !== source.OPEN) return;\n return source.send(data);\n}\n\nexport type HMROptions = {\n path: string;\n assetPrefix: string;\n timeout?: number;\n log?: boolean;\n};\n\nexport function connectHMR(options: HMROptions) {\n const { timeout = 5 * 1000 } = options;\n\n function init() {\n if (source) source.close();\n\n console.log(\"[HMR] connecting...\");\n\n function handleOnline() {\n eventCallbacks.forEach((cb) => {\n cb({\n type: \"connected\",\n });\n });\n\n if (options.log) console.log(\"[HMR] connected\");\n // lastActivity = Date.now()\n }\n\n function handleMessage(event: MessageEvent) {\n // lastActivity = Date.now()\n\n eventCallbacks.forEach((cb) => {\n cb({\n type: \"message\",\n message: event,\n });\n });\n }\n\n // let timer: NodeJS.Timeout\n\n function handleDisconnect() {\n source.close();\n setTimeout(init, timeout);\n }\n\n const { hostname, port } = location;\n const protocol = getSocketProtocol(options.assetPrefix || \"\");\n const assetPrefix = options.assetPrefix.replace(/^\\/+/, \"\");\n\n let url = `${protocol}://${hostname}:${port}${\n assetPrefix ? `/${assetPrefix}` : \"\"\n }`;\n\n if (assetPrefix.startsWith(\"http\")) {\n url = `${protocol}://${assetPrefix.split(\"://\")[1]}`;\n }\n\n source = new window.WebSocket(`${url}${options.path}`);\n source.onopen = handleOnline;\n source.onerror = handleDisconnect;\n source.onmessage = handleMessage;\n }\n\n init();\n}\n"],"names":[],"mappings":";;;;;AAEA,IAAI;AACJ,MAAM,iBAAsD,EAAE;AAK9D,SAAS,kBAAkB,WAAmB;IAC5C,IAAI,WAAW,SAAS;IAExB,IAAI;QAEF,WAAW,IAAI,IAAI,aAAa;IAClC,EAAE,OAAO,GAAG,CAAC;IAEb,OAAO,aAAa,UAAU,OAAO;AACvC;AAWO,SAAS,iBAAiB,EAAmC;IAClE,eAAe,KAAK;AACtB;AAEO,SAAS,YAAY,IAAS;IACnC,IAAI,CAAC,UAAU,OAAO,eAAe,OAAO,MAAM;IAClD,OAAO,OAAO,KAAK;AACrB;AASO,SAAS,WAAW,OAAmB;IAC5C,MAAM,EAAE,SAAU,IAAI,KAAI,EAAE,GAAG;IAE/B,SAAS;QACP,IAAI,QAAQ,OAAO;QAEnB,QAAQ,IAAI;QAEZ,SAAS;YACP,eAAe,QAAQ,CAAC;gBACtB,GAAG;oBACD,MAAM;gBACR;YACF;YAEA,IAAI,QAAQ,KAAK,QAAQ,IAAI;QAE/B;QAEA,SAAS,cAAc,KAAmB;YAGxC,eAAe,QAAQ,CAAC;gBACtB,GAAG;oBACD,MAAM;oBACN,SAAS;gBACX;YACF;QACF;QAIA,SAAS;YACP,OAAO;YACP,WAAW,MAAM;QACnB;QAEA,MAAM,EAAE,SAAQ,EAAE,KAAI,EAAE,GAAG;QAC3B,MAAM,WAAW,kBAAkB,QAAQ,eAAe;QAC1D,MAAM,cAAc,QAAQ,YAAY,QAAQ,QAAQ;QAExD,IAAI,MAAM,CAAC,EAAE,SAAS,GAAG,EAAE,SAAS,CAAC,EAAE,KAAK,EAC1C,cAAc,CAAC,CAAC,EAAE,YAAY,CAAC,GAAG,GACnC,CAAC;QAEF,IAAI,YAAY,WAAW,SAAS;YAClC,MAAM,CAAC,EAAE,SAAS,GAAG,EAAE,YAAY,MAAM,MAAM,CAAC,EAAE,CAAC,CAAC;QACtD;QAEA,SAAS,IAAI,OAAO,UAAU,CAAC,EAAE,IAAI,EAAE,QAAQ,KAAK,CAAC;QACrD,OAAO,SAAS;QAChB,OAAO,UAAU;QACjB,OAAO,YAAY;IACrB;IAEA;AACF"}}, {"offset": {"line": 64, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, {"offset": {"line": 68, "column": 0}, "map": {"version":3,"sources":["/turbopack/[turbopack-dev]/client/hmr-client.ts"],"sourcesContent":["import type {\n ChunkListUpdate,\n ChunkUpdate,\n ClientMessage,\n EcmascriptMergedChunkUpdate,\n EcmascriptMergedUpdate,\n EcmascriptModuleEntry,\n Issue,\n ResourceIdentifier,\n ServerMessage,\n} from \"../../types/protocol\";\nimport type {\n ChunkPath,\n ModuleId,\n UpdateCallback,\n TurbopackGlobals,\n} from \"../../types\";\n\nimport { addEventListener, sendMessage } from \"./websocket\";\n\ndeclare var globalThis: TurbopackGlobals;\n\nexport type ClientOptions = {\n assetPrefix: string;\n};\n\nexport function connect({ assetPrefix }: ClientOptions) {\n addEventListener((event) => {\n switch (event.type) {\n case \"connected\":\n handleSocketConnected();\n break;\n case \"message\":\n const msg: ServerMessage = JSON.parse(event.message.data);\n handleSocketMessage(msg);\n break;\n }\n });\n\n const queued = globalThis.TURBOPACK_CHUNK_UPDATE_LISTENERS;\n if (queued != null && !Array.isArray(queued)) {\n throw new Error(\"A separate HMR handler was already registered\");\n }\n globalThis.TURBOPACK_CHUNK_UPDATE_LISTENERS = {\n push: ([chunkPath, callback]: [ChunkPath, UpdateCallback]) => {\n subscribeToChunkUpdate(chunkPath, callback);\n },\n };\n\n if (Array.isArray(queued)) {\n for (const [chunkPath, callback] of queued) {\n subscribeToChunkUpdate(chunkPath, callback);\n }\n }\n}\n\ntype UpdateCallbackSet = {\n callbacks: Set;\n unsubscribe: () => void;\n};\n\nconst updateCallbackSets: Map = new Map();\n\nfunction sendJSON(message: ClientMessage) {\n sendMessage(JSON.stringify(message));\n}\n\ntype ResourceKey = string;\n\nfunction resourceKey(resource: ResourceIdentifier): ResourceKey {\n return JSON.stringify({\n path: resource.path,\n headers: resource.headers || null,\n });\n}\n\nfunction subscribeToUpdates(resource: ResourceIdentifier): () => void {\n sendJSON({\n type: \"subscribe\",\n ...resource,\n });\n\n return () => {\n sendJSON({\n type: \"unsubscribe\",\n ...resource,\n });\n };\n}\n\nfunction handleSocketConnected() {\n for (const key of updateCallbackSets.keys()) {\n subscribeToUpdates(JSON.parse(key));\n }\n}\n\n// we aggregate all pending updates until the issues are resolved\nconst chunkListsWithPendingUpdates: Map<\n ResourceKey,\n { update: ChunkListUpdate; resource: ResourceIdentifier }\n> = new Map();\n\nfunction aggregateUpdates(\n msg: ServerMessage,\n aggregate: boolean\n): ServerMessage {\n const key = resourceKey(msg.resource);\n let aggregated = chunkListsWithPendingUpdates.get(key);\n\n if (msg.type === \"issues\" && aggregated != null) {\n if (!aggregate) {\n chunkListsWithPendingUpdates.delete(key);\n }\n\n return {\n ...msg,\n type: \"partial\",\n instruction: aggregated.update,\n };\n }\n\n if (msg.type !== \"partial\") return msg;\n\n if (aggregated == null) {\n if (aggregate) {\n chunkListsWithPendingUpdates.set(key, {\n resource: msg.resource,\n update: msg.instruction,\n });\n }\n\n return msg;\n }\n\n aggregated = {\n resource: msg.resource,\n update: mergeChunkListUpdates(aggregated.update, msg.instruction),\n };\n\n if (aggregate) {\n chunkListsWithPendingUpdates.set(key, aggregated);\n } else {\n // Once we receive a partial update with no critical issues, we can stop aggregating updates.\n // The aggregated update will be applied.\n chunkListsWithPendingUpdates.delete(key);\n }\n\n return {\n ...msg,\n instruction: aggregated.update,\n };\n}\n\nfunction mergeChunkListUpdates(\n updateA: ChunkListUpdate,\n updateB: ChunkListUpdate\n): ChunkListUpdate {\n let chunks;\n if (updateA.chunks != null) {\n if (updateB.chunks == null) {\n chunks = updateA.chunks;\n } else {\n chunks = mergeChunkListChunks(updateA.chunks, updateB.chunks);\n }\n } else if (updateB.chunks != null) {\n chunks = updateB.chunks;\n }\n\n let merged;\n if (updateA.merged != null) {\n if (updateB.merged == null) {\n merged = updateA.merged;\n } else {\n // Since `merged` is an array of updates, we need to merge them all into\n // one, consistent update.\n // Since there can only be `EcmascriptMergeUpdates` in the array, there is\n // no need to key on the `type` field.\n let update = updateA.merged[0];\n for (let i = 1; i < updateA.merged.length; i++) {\n update = mergeChunkListEcmascriptMergedUpdates(\n update,\n updateA.merged[i]\n );\n }\n\n for (let i = 0; i < updateB.merged.length; i++) {\n update = mergeChunkListEcmascriptMergedUpdates(\n update,\n updateB.merged[i]\n );\n }\n\n merged = [update];\n }\n } else if (updateB.merged != null) {\n merged = updateB.merged;\n }\n\n return {\n type: \"ChunkListUpdate\",\n chunks,\n merged,\n };\n}\n\nfunction mergeChunkListChunks(\n chunksA: Record,\n chunksB: Record\n): Record {\n const chunks: Record = {};\n\n for (const [chunkPath, chunkUpdateA] of Object.entries(chunksA)) {\n const chunkUpdateB = chunksB[chunkPath];\n if (chunkUpdateB != null) {\n const mergedUpdate = mergeChunkUpdates(chunkUpdateA, chunkUpdateB);\n if (mergedUpdate != null) {\n chunks[chunkPath] = mergedUpdate;\n }\n } else {\n chunks[chunkPath] = chunkUpdateA;\n }\n }\n\n for (const [chunkPath, chunkUpdateB] of Object.entries(chunksB)) {\n if (chunks[chunkPath] == null) {\n chunks[chunkPath] = chunkUpdateB;\n }\n }\n\n return chunks;\n}\n\nfunction mergeChunkUpdates(\n updateA: ChunkUpdate,\n updateB: ChunkUpdate\n): ChunkUpdate | undefined {\n if (\n (updateA.type === \"added\" && updateB.type === \"deleted\") ||\n (updateA.type === \"deleted\" && updateB.type === \"added\")\n ) {\n return undefined;\n }\n\n if (updateA.type === \"partial\") {\n invariant(updateA.instruction, \"Partial updates are unsupported\");\n }\n\n if (updateB.type === \"partial\") {\n invariant(updateB.instruction, \"Partial updates are unsupported\");\n }\n\n return undefined;\n}\n\nfunction mergeChunkListEcmascriptMergedUpdates(\n mergedA: EcmascriptMergedUpdate,\n mergedB: EcmascriptMergedUpdate\n): EcmascriptMergedUpdate {\n const entries = mergeEcmascriptChunkEntries(mergedA.entries, mergedB.entries);\n const chunks = mergeEcmascriptChunksUpdates(mergedA.chunks, mergedB.chunks);\n\n return {\n type: \"EcmascriptMergedUpdate\",\n entries,\n chunks,\n };\n}\n\nfunction mergeEcmascriptChunkEntries(\n entriesA: Record | undefined,\n entriesB: Record | undefined\n): Record {\n return { ...entriesA, ...entriesB };\n}\n\nfunction mergeEcmascriptChunksUpdates(\n chunksA: Record | undefined,\n chunksB: Record | undefined\n): Record | undefined {\n if (chunksA == null) {\n return chunksB;\n }\n\n if (chunksB == null) {\n return chunksA;\n }\n\n const chunks: Record = {};\n\n for (const [chunkPath, chunkUpdateA] of Object.entries(chunksA)) {\n const chunkUpdateB = chunksB[chunkPath];\n if (chunkUpdateB != null) {\n const mergedUpdate = mergeEcmascriptChunkUpdates(\n chunkUpdateA,\n chunkUpdateB\n );\n if (mergedUpdate != null) {\n chunks[chunkPath] = mergedUpdate;\n }\n } else {\n chunks[chunkPath] = chunkUpdateA;\n }\n }\n\n for (const [chunkPath, chunkUpdateB] of Object.entries(chunksB)) {\n if (chunks[chunkPath] == null) {\n chunks[chunkPath] = chunkUpdateB;\n }\n }\n\n if (Object.keys(chunks).length === 0) {\n return undefined;\n }\n\n return chunks;\n}\n\nfunction mergeEcmascriptChunkUpdates(\n updateA: EcmascriptMergedChunkUpdate,\n updateB: EcmascriptMergedChunkUpdate\n): EcmascriptMergedChunkUpdate | undefined {\n if (updateA.type === \"added\" && updateB.type === \"deleted\") {\n // These two completely cancel each other out.\n return undefined;\n }\n\n if (updateA.type === \"deleted\" && updateB.type === \"added\") {\n const added = [];\n const deleted = [];\n const deletedModules = new Set(updateA.modules ?? []);\n const addedModules = new Set(updateB.modules ?? []);\n\n for (const moduleId of addedModules) {\n if (!deletedModules.has(moduleId)) {\n added.push(moduleId);\n }\n }\n\n for (const moduleId of deletedModules) {\n if (!addedModules.has(moduleId)) {\n deleted.push(moduleId);\n }\n }\n\n if (added.length === 0 && deleted.length === 0) {\n return undefined;\n }\n\n return {\n type: \"partial\",\n added,\n deleted,\n };\n }\n\n if (updateA.type === \"partial\" && updateB.type === \"partial\") {\n const added = new Set([...(updateA.added ?? []), ...(updateB.added ?? [])]);\n const deleted = new Set([\n ...(updateA.deleted ?? []),\n ...(updateB.deleted ?? []),\n ]);\n\n if (updateB.added != null) {\n for (const moduleId of updateB.added) {\n deleted.delete(moduleId);\n }\n }\n\n if (updateB.deleted != null) {\n for (const moduleId of updateB.deleted) {\n added.delete(moduleId);\n }\n }\n\n return {\n type: \"partial\",\n added: [...added],\n deleted: [...deleted],\n };\n }\n\n if (updateA.type === \"added\" && updateB.type === \"partial\") {\n const modules = new Set([\n ...(updateA.modules ?? []),\n ...(updateB.added ?? []),\n ]);\n\n for (const moduleId of updateB.deleted ?? []) {\n modules.delete(moduleId);\n }\n\n return {\n type: \"added\",\n modules: [...modules],\n };\n }\n\n if (updateA.type === \"partial\" && updateB.type === \"deleted\") {\n // We could eagerly return `updateB` here, but this would potentially be\n // incorrect if `updateA` has added modules.\n\n const modules = new Set(updateB.modules ?? []);\n\n if (updateA.added != null) {\n for (const moduleId of updateA.added) {\n modules.delete(moduleId);\n }\n }\n\n return {\n type: \"deleted\",\n modules: [...modules],\n };\n }\n\n // Any other update combination is invalid.\n\n return undefined;\n}\n\nfunction invariant(never: never, message: string): never {\n throw new Error(`Invariant: ${message}`);\n}\n\nconst CRITICAL = [\"bug\", \"error\", \"fatal\"];\n\nfunction compareByList(list: any[], a: any, b: any) {\n const aI = list.indexOf(a) + 1 || list.length;\n const bI = list.indexOf(b) + 1 || list.length;\n return aI - bI;\n}\n\nconst chunksWithIssues: Map = new Map();\n\nfunction emitIssues() {\n const issues = [];\n const deduplicationSet = new Set();\n\n for (const [_, chunkIssues] of chunksWithIssues) {\n for (const chunkIssue of chunkIssues) {\n if (deduplicationSet.has(chunkIssue.formatted)) continue;\n\n issues.push(chunkIssue);\n deduplicationSet.add(chunkIssue.formatted);\n }\n }\n\n sortIssues(issues);\n\n hooks.issues(issues);\n}\n\nfunction handleIssues(msg: ServerMessage): boolean {\n const key = resourceKey(msg.resource);\n let hasCriticalIssues = false;\n\n for (const issue of msg.issues) {\n if (CRITICAL.includes(issue.severity)) {\n hasCriticalIssues = true;\n }\n }\n\n if (msg.issues.length > 0) {\n chunksWithIssues.set(key, msg.issues);\n } else if (chunksWithIssues.has(key)) {\n chunksWithIssues.delete(key);\n }\n\n emitIssues();\n\n return hasCriticalIssues;\n}\n\nconst SEVERITY_ORDER = [\"bug\", \"fatal\", \"error\", \"warning\", \"info\", \"log\"];\nconst CATEGORY_ORDER = [\n \"parse\",\n \"resolve\",\n \"code generation\",\n \"rendering\",\n \"typescript\",\n \"other\",\n];\n\nfunction sortIssues(issues: Issue[]) {\n issues.sort((a, b) => {\n const first = compareByList(SEVERITY_ORDER, a.severity, b.severity);\n if (first !== 0) return first;\n return compareByList(CATEGORY_ORDER, a.category, b.category);\n });\n}\n\nconst hooks = {\n beforeRefresh: () => {},\n refresh: () => {},\n buildOk: () => {},\n issues: (issues: Issue[]) => {},\n};\n\nexport function setHooks(newHooks: typeof hooks) {\n Object.assign(hooks, newHooks);\n}\n\nfunction handleSocketMessage(msg: ServerMessage) {\n sortIssues(msg.issues);\n\n const hasCriticalIssues = handleIssues(msg);\n\n // TODO(WEB-582) Disable update aggregation for now.\n const aggregate = /* hasCriticalIssues */ false;\n const aggregatedMsg = aggregateUpdates(msg, aggregate);\n\n if (aggregate) return;\n\n const runHooks = chunkListsWithPendingUpdates.size === 0;\n\n if (aggregatedMsg.type !== \"issues\") {\n if (runHooks) hooks.beforeRefresh();\n triggerUpdate(aggregatedMsg);\n if (runHooks) hooks.refresh();\n }\n\n if (runHooks) hooks.buildOk();\n\n // This is used by the Next.js integration test suite to notify it when HMR\n // updates have been completed.\n // TODO: Only run this in test environments (gate by `process.env.__NEXT_TEST_MODE`)\n if (globalThis.__NEXT_HMR_CB) {\n globalThis.__NEXT_HMR_CB();\n globalThis.__NEXT_HMR_CB = null;\n }\n}\n\nexport function subscribeToChunkUpdate(\n chunkPath: ChunkPath,\n callback: UpdateCallback\n): () => void {\n return subscribeToUpdate(\n {\n path: chunkPath,\n },\n callback\n );\n}\n\nexport function subscribeToUpdate(\n resource: ResourceIdentifier,\n callback: UpdateCallback\n) {\n const key = resourceKey(resource);\n let callbackSet: UpdateCallbackSet;\n const existingCallbackSet = updateCallbackSets.get(key);\n if (!existingCallbackSet) {\n callbackSet = {\n callbacks: new Set([callback]),\n unsubscribe: subscribeToUpdates(resource),\n };\n updateCallbackSets.set(key, callbackSet);\n } else {\n existingCallbackSet.callbacks.add(callback);\n callbackSet = existingCallbackSet;\n }\n\n return () => {\n callbackSet.callbacks.delete(callback);\n\n if (callbackSet.callbacks.size === 0) {\n callbackSet.unsubscribe();\n updateCallbackSets.delete(key);\n }\n };\n}\n\nfunction triggerUpdate(msg: ServerMessage) {\n const key = resourceKey(msg.resource);\n const callbackSet = updateCallbackSets.get(key);\n if (!callbackSet) {\n return;\n }\n\n try {\n for (const callback of callbackSet.callbacks) {\n callback(msg);\n }\n\n if (msg.type === \"notFound\") {\n // This indicates that the resource which we subscribed to either does not exist or\n // has been deleted. In either case, we should clear all update callbacks, so if a\n // new subscription is created for the same resource, it will send a new \"subscribe\"\n // message to the server.\n // No need to send an \"unsubscribe\" message to the server, it will have already\n // dropped the update stream before sending the \"notFound\" message.\n updateCallbackSets.delete(key);\n }\n } catch (err) {\n console.error(\n `An error occurred during the update of resource \\`${msg.resource.path}\\``,\n err\n );\n location.reload();\n }\n}\n"],"names":[],"mappings":"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"}}, {"offset": {"line": 511, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}] }